#include "widget.h"
#include "ui_widget.h"

#include <QFile>
#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
//    this->readJson();
    this->createJson();
}

void Widget::createJson()
{
    // 1. 创建jsonObj
    QJsonObject rootObj;

    // 向jsonObj中添加key-value
    rootObj.insert("id", 2);
    rootObj.insert("name", "于谦");
    rootObj.insert("isMarry", true);

    // 添加数组
    QJsonArray hobbisArray;
    hobbisArray.append("抽烟");
    hobbisArray.append("喝酒");
    hobbisArray.append("烫头");
    rootObj.insert("hobbis", hobbisArray);

    QJsonArray ary;
    ary.append("大保镖");
    ary.append("黄鹤楼");
    ary.append("我是黑社会");
    rootObj.insert("zp", ary);

    // 添加对象
    QJsonObject obj;
    obj.insert("name", "于云霆");
    obj.insert("age", 6);
    rootObj.insert("son", obj);


    // 2. jsonObj --> jsonDoc
    QJsonDocument jsonDoc(rootObj);

    // 3. jsonDoc -- >jsonStr
    QByteArray jsonStr = jsonDoc.toJson();

    // 4. 将jsonStr 写入文件
    QFile file("e:/yq.json");
    file.open(QIODevice::WriteOnly);
    file.write(jsonStr);
    file.close();
}

void Widget::readJson()
{
    // 1. 使用QFile读取json文件中的内容，得到json格式的字符串（jsonStr）
    QFile file("E:/Projects/QtProjects/study/qt-12/bookstore.json");
    file.open(QIODevice::ReadOnly);
    QByteArray jsonStr = file.readAll();

    // 2. 将json字符串转为json文档（jsonStr ---> jsonDoc）
    QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonStr);

    // 3. 将json文档转为json对象（jsonDoc ---> jsonObj）
    QJsonObject jsonObj = jsonDoc.object();

    // 使用 value 方法从 jsonObj 中根据key获得value值
    // 使用value得到的结果都是 QJsonValue 类型，要使用具体数据时，要转为具体的类型
    qDebug() << jsonObj.value("storeName") << jsonObj.value("storeName").toString();
    qDebug() << jsonObj.value("addr").toString();
    qDebug() << (jsonObj.value("status").toBool() ? "正在营业" : "关门大吉");
    qDebug() << jsonObj.value("id").toInt();

    // 处理对象
    QJsonObject boss = jsonObj.value("boss").toObject();
    qDebug() << boss.value("name").toString();
    qDebug() << boss.value("age").toInt();

    // 处理数组
    QJsonArray ary = jsonObj.value("employee").toArray();
    for(QJsonValue item : ary)
    {
        qDebug() << item.toString();
    }

    // 渲染表格
    QJsonArray booksArray = jsonObj.value("books").toArray();
    ui->tableWidget->setRowCount(booksArray.size());
    ui->tableWidget->setColumnCount(4);
    ui->tableWidget->setHorizontalHeaderLabels({"书名", "作者", "售价", "出版日期"});
    int row = 0;
    for (QJsonValue item : booksArray)
    {
        QJsonObject book = item.toObject();
        ui->tableWidget->setItem(row, 0, new QTableWidgetItem(book.value("bookname").toString()));
        ui->tableWidget->setItem(row, 1, new QTableWidgetItem(book.value("author").toString()));
        ui->tableWidget->setItem(row, 2, new QTableWidgetItem(QString::number(book.value("price").toDouble())));
        ui->tableWidget->setItem(row++, 3, new QTableWidgetItem(book.value("pubDate").toString()));
    }
}

Widget::~Widget()
{
    delete ui;
}
